import { GameManager } from './core/GameManager';
import { Player } from './character/Player';
import { World } from './world/World';
import { UIManager } from './ui/UIManager';

/**
 * 游戏主程序入口类
 * 负责初始化游戏所有子系统并管理游戏主循环
 */
class Main {
    /**
     * 游戏管理器实例
     * @private
     */
    private gameManager: GameManager;

    /**
     * 玩家控制器实例
     * @private
     */
    private player: Player;

    /**
     * 世界管理器实例
     * @private
     */
    private world: World;

    /**
     * UI管理器实例
     * @private
     */
    private uiManager: UIManager;

    /**
     * 构造函数，初始化游戏所有子系统
     */
    constructor() {
        // 初始化游戏管理器
        this.gameManager = new GameManager();

        // 创建玩家实例
        this.player = new Player();
        this.player.init();

        // 创建世界实例
        this.world = new World();
        this.world.generateTerrain();

        // 初始化UI管理器
        this.uiManager = new UIManager();
        this.uiManager.init();

        // 启动游戏循环
        this.gameLoop();
    }

    /**
     * 游戏主循环
     * 使用requestAnimationFrame实现游戏循环
     * @private
     */
    private gameLoop(): void {
        // 更新游戏状态
        this.update();
        // 渲染游戏
        this.render();

        // 使用requestAnimationFrame继续循环
        requestAnimationFrame(() => this.gameLoop());
    }

    /**
     * 更新游戏状态
     * 调用所有子系统的update方法
     * @private
     */
    private update(): void {
        const dt = 1/60; // 假设60帧每秒
        this.player.update(dt);
        this.world.update(dt);
        this.gameManager.update(dt);
    }

    /**
     * 渲染游戏
     * 调用UI管理器的render方法
     * @private
     */
    private render(): void {
        this.uiManager.render();
    }
}

// 启动游戏
new Main();
